<?php
/**
  +--------------------------------------------
  php分页类   
  创建时间 2010.11.12  
   
   
  使用方法：
   
  $pages = new Pages(
  此处传递必须参数 数据总数,
  以下为可选参数可以不写 依次为:
$每页展示数量默认10,
$分页样式,
$是否自动写入分页样式 1 代表自动]
);
   
   
  $p1->firstpage(); //首页展示方法 | $p1->prepage(); //上一页展示
  $p1->nextpage(); //下一页 | $p1->lastpage(); //最后一页
  $p1->skip_page(); //跳转页 | $p1->more_page(); //中间过渡页
   
  **  
  $p1->limit 为一个数组 $limit['a'] 是sql 语句limit 所需的前面的数值 $limit['b'] 是后面的值
  可以通过对象直接访问获得
  **
  +--------------------------------------------
**/
class Pages{

private $total_rows; //数据总数

private $every_page_show = 10; //每一页展示数量

private $curren_pagename; //当前页面名称

public $limit; //以数组的形式返回 sql 语句必须的limit值 $limit[a] - 代表前面的值 $limit[b] - 代表后面的值

private $total_pages; //页码总数

//style 代表了分页的样式
private $style = '<style>
.pages_norame {background:#fff;display:bolck; width:auto; height:20px; float:left; padding-left:5px; padding-right:5px; font-family:Arial, Helvetica, sans-serif; font-size:12px; border:1px solid #2c9cab; line-height:20px; text-decoration:none; margin-right:6px; color:#2c9cab;}
.pages_norame:hover{background-color:#F0F4F6; color:#ab442c;}
.pages_select_nename{font-family:Arial, Helvetica, sans-serif; font-size:12px; float:left;}
.pages_bold{font-weight:bold; color:#ab442c;}
</style>';

/* 分页语言定义 公有类型 可以在对象的基础上访问进行修饰 */

public $lang = array('FirstPage' => '首页',
'PrePage' => '上一页',
'NextPage' => '下一页',
'LastPage' => '尾页'
);
  /* 定义url参数的保持变量 */

private $url_get;


/*  
类的函数定义

1 构造函数
*/
function pages($total_rows,$every_page_show=10,$style='default',$style_auto_print=1){

$this->total_rows = $total_rows;
$this->every_page_show = $every_page_show;

/* 分页样式更改设置 */
if($style != 'default'){
$this->style = $style;
}

/* 计算总计页码数 */

$this->total_pages = ceil($this->total_rows/$this->every_page_show);

/* 检查当前页码不能小于1 不能大于 最大页码 */

if(!isset($_GET['pages_id'])){
$_GET['pages_id'] = 1;
}else{
$_GET['pages_id'] = intval($_GET['pages_id']);
}

if($_GET['pages_id'] < 1){
$_GET['pages_id'] = 1;
}

if($_GET['pages_id'] > $this->total_pages){
$_GET['pages_id'] = $this->total_pages;
}

/* 计算sql 语句必须的2个数值 */
if($_GET['pages_id']>=1){
	$this->limit['a'] = ($_GET['pages_id']-1)*$this->every_page_show;
}else{
	$this->limit['a'] = '0';
}
$this->limit['b'] = $this->every_page_show;

/* 获得调用本类的页面名称 */

$page_arr = explode('/',$_SERVER['PHP_SELF']);
$this->curren_pagename = end($page_arr);

/* 获得页面的url参数并保持到页码 */

if(count($_GET) >= 1){

foreach($_GET as $key=>$values){
if($key !== 'pages_id'){
$this->url_get .= '&'.$key.'='.$values;
}
}
}

/* 根据参数 $style_auto_print 自动输出样式 */
if($style_auto_print == 1){
$this->style_write();
}
}


/**
+-------------------------------------------------
以下代码使用方法直接输出页面展示  
包含样式的输出
+-------------------------------------------------
**/

/* 定义首页展示方法 */

function style_write(){
return $this->style;
}

function firstpage(){
	if($_GET['pages_id']>=2){
		return '<a href="'.$this->curren_pagename.'?pages_id=1'.$this->url_get.'" class="pages_norame">'.$this->lang['FirstPage'].'</a>';
	}else{
		return '<a class="pages_norame">'.$this->lang['FirstPage'].'</a>';
	}
}

/* 定义上一页展示方法 */

function prepage(){
	if($_GET['pages_id']>=2){
		return '<a href="'.$this->curren_pagename.'?pages_id='.($_GET['pages_id']-1).$this->url_get.'" class="pages_norame">'.$this->lang['PrePage'].'</a>';
	}else{
		return '<a class="pages_norame">'.$this->lang['PrePage'].'</a>';
	}
}

/* 定义下一页展示方法 */

function nextpage(){
	if($_GET['pages_id']<=$this->total_pages-1){
		return '<a href="'.$this->curren_pagename.'?pages_id='.($_GET['pages_id']+1).$this->url_get.'" class="pages_norame">'.$this->lang['NextPage'].'</a>';
	}else{
		return '<a class="pages_norame">'.$this->lang['NextPage'].'</a>';
	}
}

/* 定义尾页展示方法 */

function lastpage(){
	if($_GET['pages_id']<=$this->total_pages-1){
		return '<a href="'.$this->curren_pagename.'?pages_id='.$this->total_pages.$this->url_get.'" class="pages_norame">'.$this->lang['LastPage'].'</a>';
	}else{
		return '<a class="pages_norame">'.$this->lang['LastPage'].'</a>';
	}
}

/* 定义跳转方法 */

function skip_page(){
$str='
<script>
function skip_pages_norename(pid){
location.href="'.$this->curren_pagename.'?pages_id="+pid+"'.$this->url_get.'";
}
</script>
<select class="pages_select_nename" onchange="skip_pages_norename(this.value)">
';
for($i = 1; $i <= $this->total_pages; $i++){
$str.='<option value="'.$i.'"';
if($i == $_GET['pages_id']){$str.=' selected="selected"';}
$str.='>第'.$i.'页</option>
';
}
$str.='</select>';
return $str;
}

/* 中间过渡页方法 */

function more_page(){

//当前页前3页展示
$str="";
$i = $_GET['pages_id']-2;
if($i < 1){$i = 1;}
for($i; $i > 0; $i++){
if($i >= $_GET['pages_id']){break;}
$str.='<a href="'.$this->curren_pagename.'?pages_id='.$i.$this->url_get.'" class="pages_norame">'.$i.'</a>
';
}

//展示当前页
$str.='<a href="'.$this->curren_pagename.'?pages_id='.$_GET['pages_id'].$this->url_get.'" class="pages_norame pages_bold">'.$_GET['pages_id'].'</a>
';
//展示当前页的后6页
//if($_GET['pages_id'] <= 3){
//	$sets = 10-$_GET['pages_id'];
//}else{
	$sets = 3;
//}
for($i = $_GET['pages_id']+1; $i <= ($_GET['pages_id']+$sets); $i++){
	if($i > $this->total_pages){break;}
		$str.='<a href="'.$this->curren_pagename.'?pages_id='.$i.$this->url_get.'" class="pages_norame">'.$i.'</a>';
	} 
	return $str;
}

/*获得上一页的url*/
function preurl(){
	if($_GET['pages_id']>=2){
		return "href='".$this->curren_pagename.'?pages_id='.($_GET['pages_id']-1).$this->url_get."'";
	}else{
		return "";
	}
}

/*获得下一页的url*/
function nexturl(){
	if($_GET['pages_id']<=$this->total_pages-1){
		return "href='".$this->curren_pagename.'?pages_id='.($_GET['pages_id']+1).$this->url_get."'";
	}else{
		return "";
	}
}

/*获得上一页的url*/
function preurl2(){
	if($_GET['pages_id']>=2){
		return $this->curren_pagename.'?pages_id='.($_GET['pages_id']-1).$this->url_get;
	}else{
		return "#";
	}
}

/*获得下一页的url*/
function nexturl2(){
	if($_GET['pages_id']<=$this->total_pages-1){
		return $this->curren_pagename.'?pages_id='.($_GET['pages_id']+1).$this->url_get;
	}else{
		return "#";
	}
}

/* class end */
}
?>